﻿///////////////////////////////////

//拖动表格开始
// JavaScript Document

var Drag={
	//非否被拖了。。。
	dragged:false,
	//用于储存被拖动的元素
	ao:null,
	move:null,

	tdiv:null,

	//拖动前的动作
	dragStart:function(){
		//获取被拖动的页面元素
		Drag.ao=event.srcElement;
		//如果被拖动的是表中的单元格或者行
		if((Drag.ao.tagName=="TD")||(Drag.ao.tagName=="TR")){
			Drag.ao.fireEvent("onClick");
			//将被拖动的元素改为上一层元素（整个表格）
			Drag.ao=Drag.ao.offsetParent;
			//定义样式
			Drag.ao.style.zIndex=100;
		}else
			return;
		//表示被选择的元素正在被拖...
		Drag.dragged=true;

		//创建一个新层
		Drag.tdiv=document.createElement("div");
		//取得table所变成的div的html.
		Drag.tdiv.innerHTML=Drag.ao.outerHTML;
		//边线虚线红边一像素
		Drag.ao.style.border="1px dashed red";
		Drag.tdiv.style.display="block";
		Drag.tdiv.style.position="absolute";
		//透明值设定
		Drag.tdiv.style.filter="alpha(opacity=60)";
		Drag.tdiv.style.cursor="move";
		Drag.tdiv.style.border="0px solid #000000";
		Drag.tdiv.style.width=Drag.ao.offsetWidth;
		Drag.tdiv.style.height=Drag.ao.offsetHeight;
		Drag.tdiv.style.top=Drag.getInfo(Drag.ao).top;
		Drag.tdiv.style.left=Drag.getInfo(Drag.ao).left;
		//将所定义新层放到body元素中
		document.body.appendChild(Drag.tdiv);

		//将整个drag对象的XY坐标改写成鼠标目前所在的XY坐标
		Drag.lastX=event.clientX;
		Drag.lastY=event.clientY;
		//将整个drag对象的XY坐标改写成table目前所在的左上角XY坐标
		Drag.lastLeft=Drag.tdiv.style.left;
		Drag.lastTop=Drag.tdiv.style.top;
	},


	//实现拖动..
	draging:function(){//重要:判断MOUSE的位置

			//如果鼠标放开。。。不执行拖动动作...
			if(!Drag.dragged||Drag.ao==null)
				return;

			//将整个drag对象的XY坐标改写成鼠标目前所在的XY坐标
			var tX=event.clientX;
			var tY=event.clientY;
			//实现拖动(计算出拖动的距离－分开水平与垂直距离)
			Drag.tdiv.style.left=parseInt(Drag.lastLeft)+(tX-Drag.lastX);
			Drag.tdiv.style.top=parseInt(Drag.lastTop)+(tY-Drag.lastY);

			//在parentTable中循环查找被移动的表靠近了哪个TD
			//然后进行相应的显示变化的操作
			for(var i=0;i<parentTable.cells.length;i++){
				var parentCell=Drag.getInfo(parentTable.cells[i]);

				//如果找到靠近被拖动的表的TD
				//if(tX>=parentCell.left&&tX<=parentCell.right&&tY>=parentCell.top&&tY<=parentCell.bottom){
				if(parentTable.isItemTable){
					var subTables=parentTable.cells[i].getElementsByTagName("table");

					//如果TD里面没其他表，将被拖动的表的内容显示在TD里面
					if(subTables.length==0){
						//if(tX>=parentCell.left&&tX<=parentCell.right&&tY>=parentCell.top&&tY<=parentCell.bottom){
							parentTable.cells[i].appendChild(Drag.ao);
						//}
						break;
					}
					//如果TD里面有其他表，将被拖动的表的内容显示在TD里面，将原来在TD里面的表的内容放到其他的空的TD里去
					for(var j=0;j<subTables.length;j++){
						var subTable=Drag.getInfo(subTables[j]);
						if(tX>=subTable.left&&tX<=subTable.right&&tY>=subTable.top&&tY<=subTable.bottom){
								parentTable.cells[i].insertBefore(Drag.ao,subTables[j]);
								break;
						}else{
							parentTable.cells[i].appendChild(Drag.ao);
						}
					}
				}
			}
			Drag.move.processCompositor(Drag.ao);

	}
	,

	//拖动结束（放开鼠标）
	dragEnd:function(){
		if(!Drag.dragged)
			return;
		Drag.dragged=false;

		Drag.mm=Drag.repos(1,1);
		Drag.ao.style.borderWidth="0px";
		Drag.ao.style.borderTop="0px solid #91908c";
		Drag.ao.style.borderLeft="0px solid #91908c";
		Drag.ao.style.borderRight="0px solid #91908c";
		Drag.ao.style.borderBottom="0px solid #91908c";
		Drag.tdiv.style.borderWidth="0px";
		Drag.ao.style.zIndex=1;
	},

	//获取对象
	getInfo:function(o){
		var to=new Object();
		to.left=to.right=to.top=to.bottom=0;
		var twidth=o.offsetWidth;
		var theight=o.offsetHeight;

		while(o!=document.body){
			to.left+=o.offsetLeft;
			to.top+=o.offsetTop;
			o=o.offsetParent;
		}
		to.right=to.left+twidth;
		to.bottom=to.top+theight;
		return to;
	},

	//设定定时器做出结束动作
	// aa - 控制结束动作的时间
	// ab - 定位被拖动元素的结束动作的动画每次移动多少象素
	repos:function(aa,ab){
		var f=Drag.tdiv.filters.alpha.opacity;
		var tl=parseInt(Drag.getInfo(Drag.tdiv).left);
		var tt=parseInt(Drag.getInfo(Drag.tdiv).top);
		var kl=(tl-Drag.getInfo(Drag.ao).left)/ab;
		var kt=(tt-Drag.getInfo(Drag.ao).top)/ab;
		var kf=f/ab;
		//返回一个定时器
		return setInterval(
		//结束动作释放对象等
				function(){
					if(ab<1){
						clearInterval(Drag.mm);
						Drag.tdiv.removeNode(true);
						Drag.ao=null;
						return;
					}
					ab--;
					tl-=kl;
					tt-=kt;
					f-=kf;
					Drag.tdiv.style.left=parseInt(tl)+"px";
					Drag.tdiv.style.top=parseInt(tt)+"px";
					Drag.tdiv.filters.alpha.opacity=f;
				}
			,aa/ab)
	},

	getKeyCode:function(){
		//如果是鼠标左键
		if(event.button == 1){
			Drag.dragStart();
		//右键
		}else if(event.button == 2){
			Drag.dragStart();
		}
	},
	inint:function(){//初始化
		for(var i=0;i<parentTable.cells.length;i++){
			var subTables=parentTable.cells[i].getElementsByTagName("table");
			for(var j=0;j<subTables.length;j++){
				if(subTables[j].className!="dragTable")
					continue;
				subTables[j].rows[0].className="dragTR";
				subTables[j].rows[0].attachEvent("onmousedown",Drag.getKeyCode);
			}
		}
		document.onmousemove=Drag.draging;
		document.onmouseup=Drag.dragEnd;
	}
//end of Object Drag
}

function Move(){
	var leftTable = document.getElementById('leftTable'); //左边未选择表格
	var rightTable = document.getElementById('rightTable'); //右边已选择表格

	var spanArray = new Array();     //保存排序的span
	/**
	 * 左移
	 */
	this.leftMove = function (){
		var selectedTable = getSelectedTd(rightTable);
		if(selectedTable != null){
			rightTable.cells[0].removeChild(selectedTable);
			leftTable.cells[0].appendChild(selectedTable);
		}
		this.processCompositor(selectedTable);
	}
	/**
	 * 右移
	 */
	this.rightMove = function(){
		var selectedTable = getSelectedTd(leftTable)
		if(selectedTable != null)
			rightTable.cells[0].appendChild(selectedTable);
		this.processCompositor(selectedTable);
	}
	/**
	 * 上移
	 */
	this.previousMove = function(){
		var selectedTable = getSelectedTd(parentTable);
		if(selectedTable != null){
			var previou = selectedTable.previousSibling;
			parentTable.cells[0].insertBefore(selectedTable,previou);
		}
		this.processCompositor();
	}
	/**
	 * 下移
	 */
	this.nextMove = function(){
		var selectedTable = getSelectedTd(parentTable);
		if(selectedTable != null){
			var next = selectedTable.nextSibling;
			next.insertAdjacentElement("afterEnd",selectedTable);
		}
		this.processCompositor();
	}

	/**
	 * 获取已选择的收费项目列表ID,序号
	 */
	this.getSelectedTableInfo = function(){
		var value = "";
		var selectedTable = rightTable.cells[0].getElementsByTagName("table");
		for(var i = 0; i < selectedTable.length; i++){
			value += selectedTable[i].id + "," + selectedTable[i].seqence + "-";
		}

		return value;
	}
	function  getSelectedTd(tableObj){
		var subTables = tableObj.cells[0].getElementsByTagName("table");
		for(var i = 0; i < subTables.length; i++){
			if(subTables[i].rows[0].className == "personal_click_list")
				return subTables[i];
		}
		return null;
	}

	/**
	 * 处理序号问题--右移时添加序号,左移时去掉序号
	 */
	this.processCompositor = function (selectedTable){
		deleteCompositor(selectedTable);
		compositor();
	}
	/**
	 * 对右边已选择添加序号
	 */
	function compositor(){
		var subTables = rightTable.cells[0].getElementsByTagName("table");
		_buildSpan(subTables.length);
		for(i = 0; i < subTables.length; i++){
			subTables[i].cells[0].insertAdjacentElement("afterBegin",spanArray[i]);
			subTables[i].seqence = i + 1;
		}
	}
	/**
	 * 删除左边表格所有的span序号
	 */
	function deleteCompositor(selectedTable){
		_deleteSpanForTable(selectedTable);
		var spans = rightTable.cells[0].getElementsByTagName("span");
		var spanCount = spans.length;
		for(var i = 0; i < spanCount; i++){
			spans[0].parentNode.removeChild(spans[0]);
		}
	}
	/**
	 * 删除表格的span
	 * @param {Object} tableObj  待删除表格对象
	 */
	function _deleteSpanForTable(tableObj){
		if(tableObj == null ) return;
		if(typeof tableObj == "undefined") return;
		if(tableObj.tagName != "TABLE") return;
		var spanObjs = tableObj.cells[0].getElementsByTagName("span");
		for(i = 0; i < spanObjs.length; i++){
			spanObjs[i].parentNode.removeChild(spanObjs[i]);
		}
	}
	function _buildSpan(length){
		if(spanArray.length < length)
			for( i = length - spanArray.length; i > 0; i--){
				var spanObj = document.createElement("span");
				spanObj.style.fontSize = 14;
				spanObj.style.color = 'red';
				spanObj.style.fontWeight = 'bold';
				spanObj.style.background = "url(" + PROJECT_NAME_PATH_MYCE + "/images/no.gif)";
				spanObj.innerText = " " + (spanArray.length + 1) + " ";
				spanArray[spanArray.length] = spanObj;
			}
	}
}
